package org.dpes.apriori;

import java.util.HashSet;
import java.util.Set;

import org.dpes.apriori.Elementy.Element;



public class Zbior {

	private IndeksBitowy zbiorElementow = new IndeksBitowy(Elementy.licznosc);

	public Zbior sklejZbiory(Zbior prawy) {
		Zbior nowy = new Zbior();
		nowy.zbiorElementow.sum(prawy.zbiorElementow);
		nowy.zbiorElementow.sum(this.zbiorElementow);
		return nowy;
	}

	public void dodajElement(Element element) {
		zbiorElementow.setUpRow(element.getValue());
	}

	public int podajLicznoscZbioru() {
		return zbiorElementow.countRows();
	}

	public Set<Element> podajElementy() {
		Set<Element> elementy = new HashSet<Element>();
		for (int i = 1; i <= Elementy.licznosc; i++) {
			if (zbiorElementow.getRowValue(i) == 1)
				elementy.add(Elementy.getSingleton().podajElement(i));
		}
		return elementy;
	}

	public long hash() {
		
		// ponoc dokladny ?!? :
		
		/*Iterator <Element> it = podajElementy().iterator();
		
		long hash = it.next().getValue();
		int multiplier = 100;
		while (it.hasNext()) {
			Element elem = it.next();
			hash += elem.getValue() * multiplier;
			multiplier *= 100;
		}
		return hash;*/
		return HashLib.RSHash(zbiorElementow.getIndeks());
	}

	@Override
	public boolean equals(Object obj) {
		return equals((Zbior) obj);
	}
	
	public IndeksBitowy podajBity() {
		return zbiorElementow;
	}
	
	public void ustawBity(int [] bity) {
		zbiorElementow = new IndeksBitowy(bity);
	}
}
